package com.sky.utils;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@Data
@AllArgsConstructor
@Slf4j
public class UploadUtil {

    private String uploadPath;

    /**
     * 上传文件。
     *
     * @param fileBytes  文件的字节数组。
     * @param objectName 新生成的文件名（不包括路径）。
     * @return 上传后的文件完整路径。
     * @throws IOException 如果文件上传过程中发生 I/O 错误。
     */
    public String upload(byte[] fileBytes, String objectName) throws IOException {
        // 获取上传路径
        // 创建文件路径
        Path filePath = Paths.get(uploadPath, objectName);
        // 创建文件父目录（如果不存在）
        Files.createDirectories(filePath.getParent());
        // 将字节数组写入文件
        try (FileOutputStream fos = new FileOutputStream(filePath.toFile())) {
            fos.write(fileBytes);
        }
        // 返回上传后的文件完整路径
        return filePath.toString();
    }
}

// 注意：上面的代码包含了一个不推荐使用的静态初始化块来注入 fileUploadService。
// 在实际应用中，你应该避免这种做法，而是将 fileUploadService 作为 UploadUtil 类的非静态依赖项。
// 这可以通过构造函数注入、方法参数传递或使用其他设计模式（如服务定位器模式，尽管这通常也不是最佳实践）来实现。
// 在这个例子中，为了保持代码的简洁性，我们保留了静态字段和静态初始化块，但请记住这只是一个教学示例。